import polars as pl
from datetime import date

"""
Int8: 8位有符号整数。
Int16: 16位有符号整数。
Int32: 32位有符号整数。
Int64: 64位有符号整数。
UInt8: 8位有符号整数。
UInt16: 16位无符号整数。
UInt32: 32位无符号整数。
UInt64: 64位无符号整数。
Float32: 32位浮点数。
Float64: 64位浮点数。
Boolean: 布尔型有效位压缩。
Utf8: 字符串数据(内部实际上是Arrow LargeUtf8)
List: 列表数组包含着包含列表值的子数组和偏移数组。(这实际上是内部的Arrow LargeList)
Date: 日期表示,内部表示为自UNIX纪元以来的天数,由32位有符号整数编码。
Datetime: Datetime表示法, 内部表示为自UNIX纪元以来的纳秒,由64位有符号整数编码。
Duration: 时间型。在减去Date/Datetime时创建。
Time: 时间表示法,从午夜开始在内部表示为纳秒。
Object: 受支持的有限数据类型,可以是任何值。
"""

Example_Data_1 = {
    "name": ["Alice", "Bob", "Charlie", "David"],
    "age": [25, 30, 35, 40],
    "date": [date(2020, 1, 1), date(2020, 1, 2), date(2020, 1, 3), date(2020, 1, 4)],
    "wight": [60.0, 70.0, 80.0, 90.0],
    "height": [170.0, 165.0, 180.0, 175.0],
}

# 1.schema 指定数据类型
df = pl.DataFrame(
    Example_Data_1,
    schema={
        "name": pl.Utf8,
        "age": pl.UInt8,
        "date": pl.Date,
        "wight": pl.Float32,
        "height": pl.Float32,
    },
)
print(df)

# 2.schema_override 指定部分数据类型
df1 = pl.DataFrame(
    Example_Data_1,
    schema_overrides={
        "age": pl.UInt8,
    },
)
print(df1)
